package cn.tedu.java.thread;

/**
 * 说说Object类中wait/notify/notifyall方法的应用？
 */
public class WaitNotifyTests {
    static String content;
    public static void main(String[] args) throws InterruptedException {
        //创建并启动一个工作线程，这个线程给一个共享变量conent赋值
        new Thread(){
            @Override
            public void run() {
                synchronized (WaitNotifyTests.class) {
                    content = "hello world";
                    //这里的工作线程为content变量赋值后，能否通知主线程可以应用content了
                    WaitNotifyTests.class.notifyAll();
                }
            }
        }.start();
        //主线程获取共享变量content的值，并将其转换为大写，然后输出
        //Thread.sleep(3000);//需要休眠多长时间合适呢？
        //能否这样，当我们的主线程拿到的content值为null，能否让主线程阻塞，直到content的值不为null
        synchronized (WaitNotifyTests.class) {
            while (content == null) WaitNotifyTests.class.wait();
            System.out.println(content.toUpperCase());
        }
        //如上代码相当于生产者线程为变量赋值、消费者线程取变量的值。
    }
}
